package com.example.demo.mapper;

import com.example.demo.entity.NoteCollection;
import com.example.demo.vo.ViewMusicCommentInfo;
import com.example.demo.vo.ViewNoteCollectionInfo;
import org.apache.ibatis.annotations.*;

import javax.persistence.criteria.CriteriaBuilder;
import java.util.List;

@Mapper
public interface NoteCollectionMapper {

    //笔记收藏表与用户表的用户名、笔记表的所有内容关联,根据用户ID查找对应用户喜欢的笔记 nc:note_collection_tb
    @Select("SELECT nc.*, " +
            "u.user_name AS collectionUserName, " + // 从 note_collection_tb 中的用户（收藏笔记的用户）
            "u2.user_name AS noteCreatorName, " + // 从 note_create_tb 中的用户 （发布笔记的用户）
            "nc2.* " +
            "FROM note_collection_tb nc " +
            "JOIN user_tb u ON nc.user_id = u.user_id " + // 连接收集表与用户表的用户
            "LEFT JOIN note_create_tb nc2 ON nc.note_create_id = nc2.note_create_id " +
            "LEFT JOIN user_tb u2 ON nc2.user_id = u2.user_id " + // 根据 note_create_tb 的 user_id 连接 user_tb
            "WHERE nc.user_id = #{user_id} " +
            "ORDER BY nc.collection_id " )
    List<ViewNoteCollectionInfo> findNoteCollectionInfoId(@Param("user_id") Integer user_id);

    //取消收藏（在笔记管理页面）
    @Delete("delete from note_collection_tb where collection_id=#{collection_id}")
    Integer deleteNoteCollection(Integer collection_id);

    //根据用户ID计数
    @Select("SELECT COUNT(*) FROM note_collection_tb WHERE user_id = #{user_id}")
    Integer countcollection(@Param("user_id") Integer user_id);


    //根据笔记id计数
    @Select("SELECT COUNT(*) FROM note_collection_tb WHERE note_create_id = #{note_create_id}")
    Integer countcollectionnoteid(@Param("note_create_id") Integer note_create_id);

    //根据用户id和笔记id，收藏笔记。
    @Insert("INSERT INTO note_collection_tb (note_create_id, user_id) VALUES (#{note_create_id}, #{user_id})")
    int insertNoteCollection(NoteCollection noteCollection);

    //删除收藏，笔记详情页
    @Delete("delete from note_collection_tb where user_id=#{user_id} and note_create_id = #{note_create_id}")
    int deleteNoteCollection1(@Param("user_id") Integer user_id, @Param("note_create_id") Integer note_create_id);

    //检查用户是否已经收藏过某条笔记
    @Select("SELECT COUNT(*) FROM note_collection_tb WHERE user_id = #{user_id} AND note_create_id = #{note_create_id}")
    int checkIfNoteCollection(@Param("user_id") Integer user_id, @Param("note_create_id") Integer note_create_id);



}
